#ifndef __CONFIG_H
#define __CONFIG_H

// 在这里定义全局宏变量

#define DEBUG            ///< 显示DEBUG信息
#define MAX_LOG_FILES 10 ///< 最大日志文件数
#define USE_LWP_ID       ///< 日志中使用轻量级线程ID
#define MAX_PATH_LEN 256 ///< 最大路径长度
#define MAX_TUNNELS 10   ///< 最大隧道数量

/**
 * @brief 服务器配置信息结构体，用于存储服务器的配置信息。
 *  包括服务器的IP、端口号、最大连接数、线程池大小、任务队列上限、日志存储路径、用户文件存储根路径、MySQL数据库信息等。
 */
typedef struct
{
    char ip[16];                     /**< 服务器绑定的IP */
    int port;                        /**< 服务器监听的端口号 */
    int max_connections;             /**< 服务器允许的最大连接数 */
    int thread_pool_size;            /**< 服务器线程池大小 */
    int task_queue_size;             /**< 服务器任务队列上限 */
    char log_path[MAX_PATH_LEN];     /**< 服务器日志存储路径 */
    char storage_path[MAX_PATH_LEN]; /**< 用户文件存储根路径 */
    char mysql_host[256];            /**< MySQL数据库主机地址 */
    int mysql_port;                  /**< MySQL数据库端口号 */
    char mysql_db[256];              /**< MySQL数据库名称 */
    char mysql_user[256];            /**< MySQL数据库用户名 */
    char mysql_password[256];        /**< MySQL数据库密码 */
    int tunnel_count;                /**<隧道数量*/
    struct
    {
        char ip[16];        /**< 隧道绑定的IP */
        int port;           /**< 隧道监听的端口号 */
    } tunnels[MAX_TUNNELS]; /**< 隧道配置信息 */
} ServerConfig_t;

/**
 * @brief 从配置文件中加载服务器配置信息
 * 从指定路径的配置文件中读取服务器的配置信息，并将其加载到指定的服务器配置结构体中。
 * @param file_path 配置文件的路径
 * @param config 指向服务器配置结构体的指针，用于存储加载的配置信息
 * @return 返回是否加载成功
 *  @retval 0 加载成功
 *  @retval -1 加载失败
 */
int loadServerConfig(const char *file_path, ServerConfig_t *config);

#endif /* __CONFIG_H */
